# -*- coding: utf-8 -*-
# Progetto Firepower (http://code.google.com/p/firepower)
# Inizio: 15 settembre 2009
# 
 
'''
main.py
 
Panda3D "Hello world": caricamento finestra Panda3D.
 
= Dipendenze =
Panda3D: è reperibile su http://www.panda3d.org
'''
 
# if you test this game in a new platform and it works
# please add a comment line with the name of your OS
#
# tested on:
#     linux Ubuntu 9.04 jaunty.
#     Mac OS X 10.5.8
 
# load the panda option module
from pandac.PandaModules import loadPrcFileData
# set fullscreen
loadPrcFileData('', 'fullscreen 1')
 
# import panda main module
import direct.directbase.DirectStart
 
from pandac.PandaModules import *
 
# import map management module
import map
# Module that provides to the illumination of the scene
import lights
# Module used for camera controlling
import camera
# events
import events
# units
import units
# functions and classes for reading configuration file
import conf
 
K_POS, K_HPR = 'position', 'orientation'
#K sta per Key (chiave del dizionario)
 
def log(x):
    #uno volendo la può riscrivere per salvare i messaggi su un file.
    print x
 
# Game main class
class Main:
    def __init__(self):
        # Set the antialias option
        render.setAntialias(AntialiasAttrib.MMultisample)
        # the background is black
        base.setBackgroundColor(0, 0, 0)
        # disable the auto mouse actions
        base.disableMouse()
 
        self.window_x = base.win.getProperties().getXSize()
        self.window_y = base.win.getProperties().getYSize()
 
        # MAP
        log('Loading map, lights, and camera...')
        self.map = map.Map('prova')
        self.lights = lights.Lights(self)
        self.camera = camera.Camera(self.map)
        self.events = events.EventsHandler(self.camera)
 
        # load units passing a dic with displacing infos        
        log('Loading units...')
        # queste coordinate del piano orizzontale sono intese per il sistema attuale, che ha origine nell'angolo inferiore sinistro
        # la coordinata z è piuttosto arbitraria al momento

        dic = {'para':{K_POS:(50, 50, 0.3), K_HPR:(20, 0, 0)}}#,
        #    'box':{K_POS:(50, 50, 3.45), K_HPR:(0, 0, 0)},
        #        'big_man':{K_POS:(50, 60, 8.4)}} #se si vuole caricare anche questo modello togliere il commento (sistemando la sintassi del dizionario sopra)
        self.units = units.load(self, dic) # non so se serve memorizzarle o basta riferirsi a render
        
        xStart, yStart = 50, 100
        
        # Creates and places a generic Unit
        unit = units.Unit(map=self.map, position=(xStart, yStart, 1), orientation=(0, 0, 0))
        self.units.append(unit)
        
        for unit in self.units:
            # mostra il box di contenimento stretto (utile per capire i limiti spaziali della nostra unità)
            unit.nodePath.showTightBounds()
            a, b = unit.nodePath.getTightBounds()
            print unit, a, b
        
        # Scegliere UNA destinazione per la self.units[-1] agendo sui commenti
        # L'unità si indirizzerà verso la destinazione e la raggiungerà in linea retta
        # (non terrà conto dei rilievi)
        #unit.goto(xStart + 5, yStart + 15) #to NE
        #unit.goto(xStart - 10, yStart + 20) #to NW
        #unit.goto(xStart - 20, yStart - 10) #to SW
        unit.goto(1000, 100) #to SE

def createShadow(np):
    sh = np.getParent().attachNewNode("shadow")
    sh.setScale(1,1,.01)
    sh.setTransparency(TransparencyAttrib.MAlpha)     
    sh.setColor(0,0,0,.4)
    np.instanceTo(sh)   
    return sh 

# Run the game
Main()
run()
